<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// JS中的数据类型：
// 基本类型（简单类型）：有一个值的简单数据段
// number string boolean null undefined
// 基本类型是保存在栈内存中的简单数据段，是按值访问
// 可以直接操作栈内存中的数据
var a = 10;
var b = a;
a = 20;
console.log( a );// 20
console.log( b );// 10

// 引用类型（复杂类型）：有多个值的复杂数据段
// object类型：object{} array[] 函数function
// 引用类型是保存在堆内存中的复杂数据段，是按引用访问
// 不可以直接操作堆内存中的数据，是通过栈内存中的引用地址访问
var obj1 = {name:'张三',age:23};
var obj2 = obj1;
obj1.name = '李四';
console.log( obj1.name );// '李四'
console.log( obj2.name );// '李四'

// 引用类型比较两个对象是否相等（比较内存地址）
console.log( obj1 === obj2 );// true
console.log( {name:'海静'} === {name:'海静'} );// false


var a = 1;
function fn(x){
    x = 2;
}
fn(a);// fn(1); 函数的值传递(实参为基本类型时，是把值传递到函数内部)
console.log( a );// 1


var obj = {name:'海静',sex:'男'};
function fn(x){
    x.sex = '女';
}
fn(obj);// fn(引用地址); 函数的引用传递(实参为引用类型时，是把引用地址传递到函数内部)
console.log( obj.sex );// '女'


</script>
</body>
</html>